package com.echo.week.io;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;

/**
 * @Author echo
 * @Description 客户端与服务端之间的通信--客户端
 * @Date 2023/10/22.
 * @Version 1.0
 */
public class NIOClient {
    public static void main(String[] args) throws IOException {

        // 1、得到一个网络通道
        SocketChannel channel = SocketChannel.open();
        //2、设置为非阻塞方式
        channel.configureBlocking(false);
        //3、提供服务端的IP地址和端口号
        InetSocketAddress address = new InetSocketAddress("127.0.0.1", 9999);
        //4、使用connect方法连接服务器，如果连接不成功，则用finishConnect放进行连接
        if (!channel.connect(address)){
            //因为连接需要花费时间，所以用while一直尝试连接，在连接服务端时还可以做别的事情，体现非阻塞
            while (!channel.finishConnect()) {
                //NIO 作为非阻塞式的优势，如果服务器没有响应（未启动服务器），客户端不会阻塞，最后会报错，客户端尝试连接服务器连接不上
                System.out.println("Client::连接服务器的同时，还可以做其他事情");
            }
        }
        //5、得到一个缓冲区并存入数据
        String msg = "你好，服务器，我是客户端";
        ByteBuffer wrap = ByteBuffer.wrap(msg.getBytes());
        //6、写数据
        channel.write(wrap);

        //阻止客户端停止，否则服务器会停止
        System.in.read();
    }
}

